// app.js
const ApiConfig = require('./config/api-config.js');

App({
  onLaunch() {
    console.log('App Launch');
    this.wxLogin()
  },

  globalData: {
    userInfo: null,
    hasToken: false // 标记是否有有效 token，可选，用于优化
  },

  /**
   * 手动触发微信登录（可以在页面 onLoad 时调用）
   */
  wxLogin() {
    wx.login({
      timeout: 10000,
      success: (res) => {
        if (res.code) {
          this.requestLogin(res.code);
        } else {
          this.handleLoginFail('获取登录凭证失败');
        }
      },
      fail: (err) => {
        this.handleLoginFail('登录失败: ' + err.errMsg);
      }
    });
  },

  // 用户登录
  requestLogin(code) {
    // 这里使用原始 wx.request，避免依赖 utils/request
    wx.request({
      url: ApiConfig.server.baseUrl + ApiConfig.endpoints.wxLogin,
      method: 'POST',
      data: { code: code },
      header: {
        'content-type': 'application/json'
      },
      success: (resp) => {
        if (resp.statusCode === 200) {
          const data = resp.data;
          if (data && data.code === 200 && data.data) {
            const { token, refreshToken } = data.data;  
            this.saveTokens(token, refreshToken);
            wx.showToast({ title: '登录成功', icon: 'success' });
            // 弹出引导 modal
            wx.showModal({
              title: '消息订阅',
              content: '是否允许接收重要通知？点击下方按钮开启订阅。',
              confirmText: '去订阅',
              cancelText: '稍后再说',
              success: (res) => {
                if (res.confirm) {
                  // ✅ 跳转到订阅页面（由用户主动确认后跳转）
                  wx.navigateTo({
                    url: '/pages/subscribe/subscribe'
                  });
                }
              }
            });
          } else {
            this.handleLoginFail(`登录失败: ${data.message || '未知错误'}`);
          }
        } else {
          this.handleLoginFail(`HTTP请求失败: ${resp.statusCode}`);
        }
      },
      fail: (err) => {
        this.handleLoginFail('网络连接失败，请检查网络');
      }
    });
  },

  // 保持token
  async saveTokens(accessToken, refreshToken) {
    try {
      await Promise.all([
        wx.setStorage({ key: ApiConfig.tokenkeys.access, data: accessToken }),
        wx.setStorage({ key: ApiConfig.tokenkeys.refresh, data: refreshToken })
      ]);
      this.globalData.hasToken = true;
    } catch (error) {
      console.error('保存 Token 失败:', error);
    }
  },

  // 处理登录失败
  handleLoginFail(message) {
    console.error('登录失败:', message);
    wx.showToast({
      title: message.length > 7 ? message.substring(0, 7) + '...' : message,
      icon: 'none',
      duration: 3000
    });
  },
  // 消息订阅
  requestSubscribe(){
    wx.requestSubscribeMessage({
      tmplIds: ['QgRzcMFYHMTR47g4gnUW9mPgAtWFPJZYaF3KL5uZW7E'], // 替换为你的实际模板 ID
      success: (res) => {
        // 用户同意订阅
        if (res['QgRzcMFYHMTR47g4gnUW9mPgAtWFPJZYaF3KL5uZW7E'] === 'accept') {
          wx.showToast({ title: '订阅成功', icon: 'success' });
          console.log('用户已订阅模板消息');
        } else {
          wx.showToast({ title: '未授权订阅', icon: 'none' });
        }
      },
      fail: (err) => {
        console.error('订阅失败', err);
        wx.showToast({ title: '订阅失败', icon: 'none' });
      }
    });
  }
});